package com.mj.listen3.排序_数组;

/**
 * https://leetcode-cn.com/problems/merge-sorted-array/submissions/
 */
public class _88_合并两个有序数组 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // nums1 = [1,3,5,0,0,0], m = 3,
        // nums2 = [2,5,6], n = 3

        // 定义三个指针

        // 指向nums1的最后位置
        int tai = m + n - 1;
        // 指向nums1的最后一个元素索引
        int p1 = m - 1;
        // 指向nums2的最后一个元素
        int p2 = n - 1;
        while (p2 >= 0) {// nums2遍历完，就结束掉循环
            if (p1 >= 0 && nums1[p1] > nums2[p2]) {
                // nums1的尾部值，大于nums2的尾部值
                nums1[tai--] = nums1[p1--];
            } else {// nums1的元素都遍历完了(p1 < 0) || nums2的元素比nums1元素要打(nums1[p1] <= nums2[p2])
                nums1[tai--] = nums2[p2--];
            }
        }
    }
}
